package com.qc.ayouth.shop.core.beans.vo;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 接口返回数据格式
 * 错误码：
 * <ul>
 * <li> 0，成功；
 * <li> 4xx，前端错误，说明前端开发者需要重新了解后端接口使用规范：
 * <ul>
 * <li> 401，参数错误，即前端没有传递后端需要的参数；
 * <li> 402，参数值错误，即前端传递的参数值不符合后端接收范围。
 * </ul>
 * <li> 5xx，后端错误，除501外，说明后端开发者应该继续优化代码，尽量避免返回后端错误码：
 * <ul>
 * <li> 501，验证失败，即后端要求用户登录；
 * <li> 502，系统内部错误，即没有合适命名的后端内部错误；
 * <li> 503，业务不支持，即后端虽然定义了接口，但是还没有实现功能；
 * <li> 504，更新数据失效，即后端采用了乐观锁更新，而并发更新时存在数据更新失效；
 * <li> 505，更新数据失败，即后端数据库更新失败（正常情况应该更新成功）。
 * </ul>
 * <li> 6xx，商城后端业务错误码，
 * 具体见ayouth-admin模块的AdminResponseCode。
 * <li> 7xx，管理后台后端业务错误码，
 * 具体见ayouth-wx模块的WxResponseCode。
 * </ul>
 */
@Data
public class ResponseVO implements Serializable {
	/**
	 * 返回处理消息
	 */
	private String message = "操作成功！";

	/**
	 * 返回代码
	 */
	private Integer code = 0;

	//用户要返回给浏览器的数据
	private Map<String, Object> data = new HashMap<String, Object>();

	public ResponseVO() {
	}

	public ResponseVO(Integer code, String message) {
		this.code = code;
		this.message = message;
	}

	public ResponseVO(Integer code, String message, Map<String, Object> data) {
		this.code = code;
		this.message = message;
		this.data = data;
	}

	public ResponseVO add(String key, Object value){
		this.getData().put(key, value);
		return this;
	}

	public void ok() {
		this.code = 0;
		this.message = "操作成功!";
	}

	public void fail(Integer code, String message) {
		this.code = code;
		this.message = message;
	}

	public void fail(String message) {
		this.code = -1;
		this.message = message;
	}

	public void badArgument() {
		this.code = 401;
		this.message = "参数不对";
	}
	public void badArgumentValue() {
		this.code = 402;
		this.message = "参数值不对";
	}
	public void unLogin() {
		this.code = 501;
		this.message = "请登录";
	}
	public void serious() {
		this.code = 502;
		this.message = "系统内部错误";
	}
	public void unSupport() {
		this.code = 503;
		this.message = "业务不支持";
	}
	public void updatedDateExpired() {
		this.code = 504;
		this.message = "更新数据已经失效";
	}
	public void updatedDataFailed() {
		this.code = 505;
		this.message = "更新数据失败";
	}
	public void deleteDataFailed() {
		this.code = 508;
		this.message = "更新数据失败";
	}
	public void saveDataFailed() {
		this.code = 506;
		this.message = "保存数据失败";
	}
	public void unAuthed() {
		this.code = 507;
		this.message = "无操作权限";
	}
}
